﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZedGraph;
using System.Drawing;

namespace ABM_De_Empleados
{
	class Grafico_de_puntos : ZedGraphControl
	{

		public RectangleF area
		{
			get;
			set;
		}

		public PointPairList puntos_de_datos
		{
			get;
			set;
		}

		public double[] x
		{
			get;
			set;
		}

		public double[] y
		{
			get;
			set;
		}

		public System.Drawing.Color color_del_punto
		{
			get;
			set;
		}

		public SymbolType forma_del_punto_de_dato
		{
			get;
			set;
		}

		public LineItem curva
		{
			get;
			set;
		}

		public Grafico_de_puntos ()
		{
			// Instancia las propiedades.
			x = new Double[2];
			y = new Double[2];
			System.Drawing.Color color_del_punto = new System.Drawing.Color ();
			SymbolType forma_del_punto_de_dato = new SymbolType ();

			area = new RectangleF ();

			// Le agrega un color de fondo
			GraphPane.Chart.Fill = new Fill (Color.White, Color.FromArgb (255, 255, 166), 90F);
			GraphPane.Fill = new Fill (Color.FromArgb (250, 250, 255));

			// Establece propiedades y luego agrega el control al formulario.
			Location = new System.Drawing.Point (210, 140);
			Name = "grafico_4";
			ScrollGrace = 0D;
			ScrollMaxX = 0D;
			ScrollMaxY = 0D;
			ScrollMaxY2 = 0D;
			ScrollMinX = 0D;
			ScrollMinY = 0D;
			ScrollMinY2 = 0D;
			Size = new System.Drawing.Size (600, 300);
			TabIndex = 4;
			Visible = true;
		}

		public void limpiar_grafico (String titulo, String titulo_x)
		{
			// Esto se debe realizar siempre al comienzo de la graficación. Limpia datos de pedidos anteriores.
			puntos_de_datos.Clear ();
			//curva.Clear ();

			area = GraphPane.Rect;
			this.GraphPane = new GraphPane (area, titulo, titulo_x, "s");

			// Le agrega un color de fondo
			GraphPane.Chart.Fill = new Fill (Color.White, Color.FromArgb (255, 255, 166), 90F);
			GraphPane.Fill = new Fill (Color.FromArgb (250, 250, 255));

			// Oculta el eje Y porque este gráfico no lo necesita.
			this.GraphPane.YAxis.IsVisible = false;
		}

		public void agregar_titulos_al_grafico (string titulo_principal, string titulo_x)
		{
			GraphPane.Title.Text = titulo_principal;
			GraphPane.XAxis.Title.Text = titulo_x;
		}

		public void modificar_escala_y (int minimo, int maximo)
		{
			GraphPane.YAxis.Scale.Min = minimo;
			GraphPane.YAxis.Scale.Max = maximo;
		}

		public void modificar_escala_x (int minimo, int maximo)
		{
			GraphPane.XAxis.Scale.Min = minimo;
			GraphPane.XAxis.Scale.Max = maximo;
		}

		public void modificar_tipo_de_ejes (AxisType x, AxisType y)
		{
			GraphPane.XAxis.Type = x;
			GraphPane.YAxis.Type = y;
		}

		public void agregar_puntos_de_datos (Double x1, Double x2)
		{
			// Y es constante, poreso no utilizo algo tomado por parámetro.
			x[0] = x1;
			x[1] = x2;

			y[0] = 3;
			y[1] = 3;
		}

		public void generar_listado_de_puntos ()
		{
			puntos_de_datos = new PointPairList (x,y);
		}

		public void generar_la_curva (String nombre_de_la_curva, Color color_del_punto, SymbolType tipo_de_simbolo)
		{
			generar_listado_de_puntos ();
			curva = GraphPane.AddCurve (nombre_de_la_curva, puntos_de_datos, color_del_punto, tipo_de_simbolo);
			curva.IsVisible = true;
		}

		public void refrescar_grafico ()
		{
			this.AxisChange ();
			this.Refresh ();
		}
	}
}
